package ar.uba.fi.algo3.titiritero.controlador;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;


public class CentralControlador extends MouseAdapter implements KeyListener
{
	private Set<MouseClickObservador> mouseClickObservadores;
	private Set<KeyPressedObservador> keyPressedObservadores;

	public CentralControlador()
	{
		mouseClickObservadores = new CopyOnWriteArraySet<MouseClickObservador>();
		keyPressedObservadores = new CopyOnWriteArraySet<KeyPressedObservador>();
	}
	
	/**
	 * Se encarga de derivar el manejo del evento click al objeto vista correspondiente
	 * @param x posicion horizontal del mouse
	 * @param y posicion vertial del mouse
	 */
	public void mouseClicked(MouseEvent e){
		for (MouseClickObservador mouseClickObservador : mouseClickObservadores) {
			mouseClickObservador.MouseClick(e.getX(), e.getY());
		}
	}
	
	public void agregarMouseClickObservador(MouseClickObservador unMouseClickObservador){
		mouseClickObservadores.add(unMouseClickObservador);
	}
	
	public void removerMouseClickObservador(MouseClickObservador unMouseClickObservador){
		mouseClickObservadores.remove(unMouseClickObservador);
	}
	
	/**
	 * Se encarga de derivar el manejo del evento keyPress al objeto vista correspondiente
	 * @param KeyEvent evento
	 */
	@Override
	public void keyPressed(KeyEvent event){
		for (KeyPressedObservador observador : keyPressedObservadores){
			observador.keyPressed(event);
		}
	}
	
	@Override
	public void keyTyped(KeyEvent e) {}
	
	@Override
	public void keyReleased(KeyEvent event){
		for (KeyPressedObservador observador : keyPressedObservadores){
			observador.keyReleased(event);
		}
	}
	
	public void agregarKeyPressObservador(KeyPressedObservador unMouseClickObservador){
		keyPressedObservadores.add(unMouseClickObservador);
	}
	
	public void removerKeyPressObservador(KeyPressedObservador unMouseClickObservador){
		keyPressedObservadores.remove(unMouseClickObservador);
	}
}
